package middleware

import (
	"n-server/pkg/common/errorcode"
	"n-server/pkg/common/response"
	"n-server/pkg/utils/jwt"
	"strings"

	"github.com/gin-gonic/gin"
)

// AuthMiddleware JWT 认证中间件（保护需要登录的接口）
func AuthMiddleware() gin.HandlerFunc {
	return func (c *gin.Context) {
		// 1. 从请求头获取 Token
		tokenStr := c.GetHeader("Authorization")
		if tokenStr == "" {
			response.ErrorMsg(c, errorcode.NOT_LOGIN_ERROR, "Header 中未获取到 Token")
			c.Abort() // 终止请求
			return
		}

		// 2. 验证 Token 格式（必须是 "Bearer <token>"）
		if !strings.HasPrefix(tokenStr, "Bearer ") {
			response.ErrorMsg(c, errorcode.PARAMS_ERROR, "Token 格式不合法")
			c.Abort()
			return
		}

		// 3. 解析 Token
		tokenStr = tokenStr[7:]
		claims, err := jwt.ParseToken(tokenStr)
		if err != nil {
			response.ErrorMsg(c, errorcode.PARAMS_ERROR, "Token 解析失败")
			c.Abort()
			return
		}

		// 4. 将用户信息存入 Context，供后续接口使用
		c.Set("userID", claims.UserID)
		c.Set("username", claims.Username)
		c.Set("role", claims.Role)

		c.Next() // 继续处理请求
	}
}